package pe.com.bn.sach.dao.impl;

import java.util.List;
import com.ibatis.sqlmap.client.SqlMapClient;


import pe.com.bn.sach.dao.CorrelativoPagareDAO;

import pe.com.bn.sach.domain.Bnchf13Expediente;
import pe.com.bn.sach.domain.Bnchf64PagCorrelativo;
import pe.com.bn.sach.domain.Bnchf64Pagare;
import pe.com.bn.sach.domain.Bnchf33ExpedientePagare;
import pe.com.bn.sach.domain.Bnchf33ExpedientePagareId;
import pe.com.bn.sach.domain.Bnchf41UnidadProc;
import pe.com.bn.sach.domain.Bnchf36ExpVendedor;

import org.apache.log4j.Logger;
import pe.com.bn.sach.seguridad.DatosSesion;
public class CorrelativoPagareImpl  implements CorrelativoPagareDAO 
{
	
	private static Logger log = Logger.getLogger(CorrelativoPagareImpl.class.getName());
	 
	protected SqlMapClient sqlMap = null;
	
	public void setSqlMap(SqlMapClient sqlMap) {
		this.sqlMap = sqlMap;
	}
	
	
	public String idAgencia(String idCH) throws Exception{    
        
		Bnchf13Expediente bnchf13Expediente = new Bnchf13Expediente();
		bnchf13Expediente.setCh(idCH);
           return (String)sqlMap.queryForObject("sqlExpIngresos.idAgencia",bnchf13Expediente);
          
    }
	
	
	public String idvendedorquery(Bnchf36ExpVendedor bnchf36ExpVendedor)throws Exception{


		
		if(Integer.parseInt(bnchf36ExpVendedor.getId().getBnchf36Vendedor().getF36TpoVend()+"")==1)
		 return (String)sqlMap.queryForObject("sqlCorrelativoPagare.idvendedorquery",bnchf36ExpVendedor);
		else if(Integer.parseInt(bnchf36ExpVendedor.getId().getBnchf36Vendedor().getF36TpoVend()+"")==2)
		 return (String)sqlMap.queryForObject("sqlCorrelativoPagare.idvendedorqueryjuridico",bnchf36ExpVendedor);
		else return null;
		
    }	
	
	
	public List consultaCheque(Bnchf33ExpedientePagare bnchf33ExpedientePagare)throws Exception{


		return sqlMap.queryForList("sqlCorrelativoPagare.consultacheques",bnchf33ExpedientePagare);
		
    }	
	
	public Bnchf13Expediente datosGeneracionPagare(Bnchf13Expediente bnchf13Expediente)throws Exception{


		List l = sqlMap.queryForList("sqlCorrelativoPagare.datosGeneracionPagare",bnchf13Expediente);
		if(l!=null)if(l.size()!=0)
			bnchf13Expediente = (Bnchf13Expediente)l.get(0);
		return bnchf13Expediente;
    }	
	
	public Bnchf33ExpedientePagare datosExpedientePagare(String idExpediente,String idUP)throws Exception{


		
		Bnchf13Expediente bnchf13Expediente = new Bnchf13Expediente();
		bnchf13Expediente.setF13IdExpediente(idExpediente);
		Bnchf33ExpedientePagare bnchf33ExpedientePagare  = new Bnchf33ExpedientePagare(); 
		List l = sqlMap.queryForList("sqlCorrelativoPagare.datosExpedientePagare",bnchf13Expediente);
		if(l!=null)if(l.size()!=0)
			bnchf33ExpedientePagare = (Bnchf33ExpedientePagare)l.get(0);
		return bnchf33ExpedientePagare;
    }	
	
	
	
	public String nextCorrelativoPag(Bnchf64PagCorrelativo bnchf64PagCorrelativo) throws Exception{    
		return (String)sqlMap.queryForObject("sqlCorrelativoPagare.nextCorrelativoPag",bnchf64PagCorrelativo);
    
	}
	
	public String correlativoPagare(Bnchf13Expediente bnchf13Expediente,DatosSesion datosSesion,String idUp,String txtIdInmueble, String descComentario) throws Exception{    


		String valCorre=bnchf13Expediente.getF13IdExpediente();
		Bnchf64PagCorrelativo bnchf64PagCorrelativo = new Bnchf64PagCorrelativo();
		bnchf64PagCorrelativo.setBnchf13Expediente(bnchf13Expediente);
		
        	String id = (String)sqlMap.queryForObject("sqlCorrelativoPagare.nextCorrelativoPag",bnchf64PagCorrelativo);


        	if(id==null)
        	{	id="01";
        		valCorre=valCorre+id;
        		bnchf64PagCorrelativo.setF64ValCorre(id);
        		bnchf64PagCorrelativo.setBnchf13Expediente(bnchf13Expediente);
        		bnchf64PagCorrelativo.setF64IdUsuaCrea(datosSesion.getCodigoUsuario());
        		GuardaCorrelativo(bnchf64PagCorrelativo);
        	}
        	else
        	{
        		valCorre=valCorre+id;
        		bnchf64PagCorrelativo.setF64ValCorre(id);
        		bnchf64PagCorrelativo.setBnchf13Expediente(bnchf13Expediente);
        		bnchf64PagCorrelativo.setF64IdUsuaModi(datosSesion.getCodigoUsuario());
        		ActualizaCorrelativo(bnchf64PagCorrelativo);
        	}
        	
        	
        	String idPagare = GuardaPagare(bnchf13Expediente,datosSesion,valCorre,descComentario);


        	GuardaExpedientePagare(bnchf13Expediente,idPagare,idUp,datosSesion,txtIdInmueble);
        return valCorre;
        
    }
	
	
	public void ActualizaCorrelativo(Bnchf64PagCorrelativo bnchf64PagCorrelativo) throws Exception{


		try{
			sqlMap.startTransaction();
			sqlMap.update("sqlCorrelativoPagare.ActualizaCorrelativo",bnchf64PagCorrelativo);
			sqlMap.commitTransaction();
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}finally{
			sqlMap.endTransaction();
		}
		
    	
    }
	
	
	public void GuardaCorrelativo(Bnchf64PagCorrelativo bnchf64PagCorrelativo) throws Exception{


		try{
			sqlMap.startTransaction();
			sqlMap.insert("sqlCorrelativoPagare.GuardaCorrelativo",bnchf64PagCorrelativo);
			sqlMap.commitTransaction();
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}finally{
			sqlMap.endTransaction();
		}
    }
	
	
	public void GuardaExpedientePagare(Bnchf13Expediente bnchf13Expediente,String idPagare,String idUp,DatosSesion datosSesion,String txtIdInmueble) throws Exception{


		
		Bnchf41UnidadProc bnchf41UnidadProc = new Bnchf41UnidadProc();
			bnchf41UnidadProc.setF41IdUnidProc(new Long(idUp));
		Bnchf64Pagare bnchf64Pagare = new Bnchf64Pagare();
			bnchf64Pagare.setF64IdPagare(idPagare);
		Bnchf33ExpedientePagareId bnchf33ExpedientePagareId = new Bnchf33ExpedientePagareId();
			bnchf33ExpedientePagareId.setBnchf13Expediente(bnchf13Expediente);
			bnchf33ExpedientePagareId.setBnchf41UnidadProc(bnchf41UnidadProc);
			
		Bnchf33ExpedientePagare bnchf33ExpedientePagare = new Bnchf33ExpedientePagare();
		bnchf33ExpedientePagare.setId(bnchf33ExpedientePagareId);
		bnchf33ExpedientePagare.setBnchf64Pagare(bnchf64Pagare);
		bnchf33ExpedientePagare.setF35IdInmueble(new Long(txtIdInmueble));
		bnchf33ExpedientePagare.setF33EstdoDesemb(new Long(0)); // 1 --- pagare generado
		bnchf33ExpedientePagare.setF33IdUsuaCrea(datosSesion.getCodigoHost());
		bnchf33ExpedientePagare.setF33IdUsuaModi(datosSesion.getCodigoHost());
		
			
		Bnchf33ExpedientePagare anteriorExpedientePagare = new Bnchf33ExpedientePagare();
		anteriorExpedientePagare.setId(bnchf33ExpedientePagareId);
		
		try {
			sqlMap.startTransaction();
			List lantpagare = sqlMap.queryForList("sqlCorrelativoPagare.datosExpedientePagare",bnchf13Expediente);
			if(lantpagare!=null)if(lantpagare.size()!=0)
			{
				anteriorExpedientePagare = (Bnchf33ExpedientePagare)lantpagare.get(0);
			}		
			String id = (String)sqlMap.queryForObject("sqlCorrelativoPagare.countExpedientePagare",bnchf33ExpedientePagare);
			

			if(Integer.parseInt(id)==0)
			{
				
				sqlMap.insert("sqlCorrelativoPagare.GuardaExpedientePagare",bnchf33ExpedientePagare);
			}
			else
			{
				
				bnchf33ExpedientePagare.setF33IdPagare2(anteriorExpedientePagare.getBnchf64Pagare().getF64IdPagare());
				
				sqlMap.update("sqlCorrelativoPagare.ActualizaExpedientePagare",bnchf33ExpedientePagare);
			}
			sqlMap.commitTransaction();	
		} catch (Exception e) {
			
			e.printStackTrace();
			throw e;
			
		}finally{
			sqlMap.endTransaction();	
		}
		

				
		
		
		
    }
	
	
	
	public String GuardaPagare(Bnchf13Expediente bnchf13Expediente,DatosSesion datosSesion,String idPagare,String descComentario) throws Exception{
		
		Bnchf64Pagare bnchf64Pagare = new Bnchf64Pagare(); 
		bnchf64Pagare.setBnchf13Expediente(bnchf13Expediente);
		bnchf64Pagare.setF64UsrReg(new  Long(datosSesion.getCodigoUsuario()));
		bnchf64Pagare.setF64UsrAct(new  Long(datosSesion.getCodigoUsuario()));
		bnchf64Pagare.setF64IdUsuaCrea(datosSesion.getCodigoHost());
		bnchf64Pagare.setF64IdPagare(idPagare);
		bnchf64Pagare.setF64EstdoPagare(new Long(1));		
		try{
					String id = (String)sqlMap.queryForObject("sqlCorrelativoPagare.idPagare",bnchf64Pagare);
					
					sqlMap.startTransaction();
					if(id==null)
						{
						bnchf64Pagare.setF64EstdoPagare(new Long(1));
							sqlMap.insert("sqlCorrelativoPagare.GuardaPagare",bnchf64Pagare);
						}
					else
					{
						bnchf64Pagare.setF64EstdoPagare(new Long(1));
						sqlMap.insert("sqlCorrelativoPagare.GuardaPagare",bnchf64Pagare);
						/**************** baja al id Pagare *******************/
						bnchf64Pagare.setF64EstdoPagare(new Long(2));
						bnchf64Pagare.setF64IdPagare(id);
						bnchf64Pagare.setF64DescComent(descComentario);
						ActualizaPagare(bnchf64Pagare,datosSesion);
					}			
					sqlMap.commitTransaction();
					bnchf64Pagare.setF64EstdoPagare(new Long(1));
			}catch(Exception e){
			e.printStackTrace();
			throw e;
		}finally{
			sqlMap.endTransaction();
		}
		
		return (String)sqlMap.queryForObject("sqlCorrelativoPagare.idPagare",bnchf64Pagare);
    	
    }
	
	
	public void ActualizaPagare(Bnchf64Pagare bnchf64Pagare,DatosSesion datosSesion) throws Exception{
		// NO HAY TRANSACCION: INVOCADO POR GuardarPagare
		
	
		bnchf64Pagare.setF64IdUsuaModi(datosSesion.getCodigoHost());
	
		sqlMap.update("sqlCorrelativoPagare.ActualizaPagare",bnchf64Pagare);

    }
	
	public void ActualizaExpPagareStadoFePend( Bnchf33ExpedientePagare bnchf33ExpedientePagare ) throws Exception{

	
		try{
			sqlMap.startTransaction();
			sqlMap.update("sqlCorrelativoPagare.ActualizaExpPagareStadoFePend",bnchf33ExpedientePagare);
			sqlMap.commitTransaction();
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}finally{
			sqlMap.endTransaction();
		}

	}
	
	
	public void ActualizaExpPagDesembolsopaso2( Bnchf33ExpedientePagare bnchf33ExpedientePagare ) throws Exception{
	
		try{
			sqlMap.startTransaction();
			sqlMap.update("sqlCorrelativoPagare.ActualizaExpPagDesembolsopaso2",bnchf33ExpedientePagare);
			sqlMap.commitTransaction();
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}finally{
			sqlMap.endTransaction();
		}
		
		
	}
	
	public void ActualizaExpPagDesembolsoanulacion( Bnchf33ExpedientePagare bnchf33ExpedientePagare ) throws Exception{
	
		try{
			sqlMap.startTransaction();
			sqlMap.update("sqlCorrelativoPagare.ActualizaExpPagDesembolsoanulacion",bnchf33ExpedientePagare);
			sqlMap.commitTransaction();
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}finally{
			sqlMap.endTransaction();
		}
		
	}
	
	
	public void ActualizaExpVendedorDesempaso2( Bnchf36ExpVendedor bnchf36ExpVendedor ) throws Exception{
	
		try{
			sqlMap.startTransaction();
			sqlMap.update("sqlCorrelativoPagare.ActualizaExpVendedorDesempaso2",bnchf36ExpVendedor);
			sqlMap.commitTransaction();
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}finally{
			sqlMap.endTransaction();
		}
	}
	
	
	
	
	
	
	
	
}
